Alcoholgebruik bij jongeren: Invloed op prestaties, gewoontes en sociale factoren#
Groep F4 - Tijmen de Langen, Dion Sneekes, Wessel Bours, Zhong Ying He
Introductie#
In deze data story analyseren we hoe alcoholgebruik onder jongeren samenhangt met schoolprestaties en sociale of familiale factoren. We onderzoeken dit vanuit twee perspectieven, ondersteund door visualisaties en gegevens uit twee datasets.
In deze data story onderzoeken we hoe alcoholgebruik onder jongeren samenhangt met schoolprestaties en sociale factoren. We benaderen dit onderwerp vanuit twee perspectieven:
Perspectief 1: Meer alcoholgebruik leidt tot slechtere academische prestaties en vaker afwezigheid.
Perspectief 2: Sociale context, zoals familiebanden en ouderlijke situatie, speelt een grote rol in het alcoholgebruik van jongeren.
We gebruiken hiervoor twee datasets die informatie bevatten over alcoholgebruik, demografische gegevens, schoolprestaties en sociale gewoontes.
Dataset en preprocessing#
We maken gebruik van twee datasets van Kaggle: één over alcoholgebruik onder middelbare scholieren en één over alcohol en academische prestaties. We beschrijven de gebruikte variabelen en tonen een voorbeeld van de gegevens.
We gebruiken twee datasets:
Student Alcohol Consumption – 382 rijen, 33 variabelen
LinkEffects of Alcohol on Student Performance – 406 rijen, 17 variabelen
Link
We laden de CSV-bestanden en voeren enkele verkenningen uit.
import pandas as pd
import plotly.express as px
df1 = pd.read_csv("datasets/student-mat.csv")
df2 = pd.read_csv("datasets/Stats survey.csv")
df1.head()
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[1], line 4
1 import pandas as pd
2 import plotly.express as px
----> 4 df1 = pd.read_csv("datasets/student-mat.csv")
5 df2 = pd.read_csv("datasets/Stats survey.csv")
7 df1.head()
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\io\parsers\readers.py:1026, in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)
1013 kwds_defaults = _refine_defaults_read(
1014 dialect,
1015 delimiter,
(...)
1022 dtype_backend=dtype_backend,
1023 )
1024 kwds.update(kwds_defaults)
-> 1026 return _read(filepath_or_buffer, kwds)
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\io\parsers\readers.py:620, in _read(filepath_or_buffer, kwds)
617 _validate_names(kwds.get("names", None))
619 # Create the parser.
--> 620 parser = TextFileReader(filepath_or_buffer, **kwds)
622 if chunksize or iterator:
623 return parser
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\io\parsers\readers.py:1620, in TextFileReader.__init__(self, f, engine, **kwds)
1617 self.options["has_index_names"] = kwds["has_index_names"]
1619 self.handles: IOHandles | None = None
-> 1620 self._engine = self._make_engine(f, self.engine)
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\io\parsers\readers.py:1880, in TextFileReader._make_engine(self, f, engine)
1878 if "b" not in mode:
1879 mode += "b"
-> 1880 self.handles = get_handle(
1881 f,
1882 mode,
1883 encoding=self.options.get("encoding", None),
1884 compression=self.options.get("compression", None),
1885 memory_map=self.options.get("memory_map", False),
1886 is_text=is_text,
1887 errors=self.options.get("encoding_errors", "strict"),
1888 storage_options=self.options.get("storage_options", None),
1889 )
1890 assert self.handles is not None
1891 f = self.handles.handle
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\io\common.py:873, in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
868 elif isinstance(handle, str):
869 # Check whether the filename is to be opened in binary mode.
870 # Binary mode does not support 'encoding' and 'newline'.
871 if ioargs.encoding and "b" not in ioargs.mode:
872 # Encoding
--> 873 handle = open(
874 handle,
875 ioargs.mode,
876 encoding=ioargs.encoding,
877 errors=errors,
878 newline="",
879 )
880 else:
881 # Binary mode
882 handle = open(handle, ioargs.mode)
FileNotFoundError: [Errno 2] No such file or directory: 'datasets/student-mat.csv'
df2.head()
| Timestamp | Your Sex? | Your Matric (grade 12) Average/ GPA (in %) | What year were you in last year (2023) ? | What faculty does your degree fall under? | Your 2023 academic year average/GPA in % (Ignore if you are 2024 1st year student) | Your Accommodation Status Last Year (2023) | Monthly Allowance in 2023 | Were you on scholarship/bursary in 2023? | Additional amount of studying (in hrs) per week | How often do you go out partying/socialising during the week? | On a night out, how many alcoholic drinks do you consume? | How many classes do you miss per week due to alcohol reasons, (i.e: being hungover or too tired?) | How many modules have you failed thus far into your studies? | Are you currently in a romantic relationship? | Do your parents approve alcohol consumption? | How strong is your relationship with your parent/s? | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024/03/07 5:12:01 pm EET | Female | 76.0 | 2nd Year | Arts & Social Sciences | 72.0 | Private accommodation/ stay with family/friends | R 4001- R 5000 | No | 8+ | Only weekends | 8+ | 3 | 0 | Yes | Yes | Very close |
| 1 | 2024/03/07 5:12:08 pm EET | Male | 89.0 | 2nd Year | Economic & Management Sciences | 75.0 | Private accommodation/ stay with family/friends | R 7001 - R 8000 | Yes (NSFAS, etc...) | 8+ | Only weekends | 3-5 | 4+ | 0 | No | Yes | Very close |
| 2 | 2024/03/07 5:12:25 pm EET | Male | 76.0 | 1st Year | AgriSciences | 55.0 | Private accommodation/ stay with family/friends | R 4001- R 5000 | No | 3-5 | 2 | 8+ | 3 | 0 | No | Yes | Very close |
| 3 | 2024/03/07 5:12:28 pm EET | Male | 89.0 | 2nd Year | Engineering | 84.0 | Private accommodation/ stay with family/friends | R 6001 - R 7000 | No | 3-5 | 3 | 8+ | 2 | 0 | Yes | Yes | Very close |
| 4 | 2024/03/07 5:13:00 pm EET | Female | 74.0 | 2nd Year | Arts & Social Sciences | 52.0 | Private accommodation/ stay with family/friends | R 4001- R 5000 | No | 3-5 | Only weekends | 5-8 | 1 | 3 | No | Yes | Fair |
Perspectief 1: Alcoholgebruik beïnvloedt academische prestaties#
We onderzoeken of er een verband is tussen alcoholgebruik op doordeweekse dagen en studietijd, afwezigheid en schoolcijfers.: Alcoholgebruik beïnvloedt academische prestaties
We verwachten dat jongeren die meer alcohol gebruiken slechtere cijfers halen en vaker afwezig zijn. Hieronder bekijken we verschillende grafieken die deze relatie inzichtelijk maken.
fig = px.box(df1, x="Pstatus", y="Dalc", color="Pstatus",
title="Weekdag-alcoholgebruik (Dalc) naar ouderlijke status (Pstatus)",
labels={"Pstatus": "Ouderlijk statuut", "Dalc": "Alcoholgebruik doordeweeks"})
fig.update_layout(height=500)
Conclusie: Doordeweeks alcoholgebruik en ouderlijke status#
Deze boxplot toont het doordeweeks alcoholgebruik (Dalc) van studenten op een schaal van 1 tot 5, opgesplitst naar ouderlijke status (Pstatus).
Gemiddeld doordeweeks gebruik:
Gescheiden ouders (
A): 1.66Samenwonende ouders (
T): 1.48
Mediaan:
A: 1.0T: 1.0
Spreiding:
Standaardafwijking
A: 1.04Standaardafwijking
T: 0.79
Interpretatie: Studenten met gescheiden ouders drinken doordeweeks gemiddeld iets meer alcohol dan studenten met samenwonende ouders. Hoewel de mediaan in beide groepen gelijk is (1.0), wijst de hogere standaarddeviatie bij Pstatus = A op meer variatie: er zijn in die groep dus zowel studenten die bijna niet drinken als studenten die aanzienlijk meer drinken.
Deze boxplot laat zien dat studenten met gescheiden ouders (Pstatus = A) gemiddeld vaker alcohol consumeren op doordeweekse dagen dan studenten met samenwonende ouders (Pstatus = T). Dit ondersteunt het idee dat thuissituatie invloed heeft op alcoholgebruik.
fig = px.scatter(df1, x="studytime", y="absences", color="age",
title="Studietijd vs Afwezigheid (ingekleurd op leeftijd)",
labels={"studytime": "Studietijd", "absences": "Afwezigheid", "age": "Leeftijd"})
fig.update_layout(height=500)
📊 Analyse van de grafiek “Studietijd vs Afwezigheid (ingekleurd op leeftijd)”#
De plot toont het volgende:
Studietijd (1–4):
De meeste studenten bevinden zich op niveau 1 of 2, wat overeenkomt met <2 uur tot 5 uur studietijd per week.
Niveau 4 (>10 uur) komt zelden voor.
Afwezigheid (absences):
De mediaan ligt op 4, met een uitschieter tot 75.
Veel studenten hebben tussen de 0 en 8 afwezigheden; extreem hoge waarden zijn zeldzaam.
Kleuren (leeftijd):
Leeftijd varieert van 15 t/m 22 jaar.
Jongere studenten (15–16 jaar) en oudere studenten (18–22 jaar) zijn gemengd verspreid over het hele plot zonder duidelijk patroon.
Relatie studietijd en afwezigheid:
Er is géén sterke negatieve of positieve correlatie zichtbaar. Studenten met weinig studietijd zijn niet per se meer afwezig dan studenten met veel studietijd.
Afwezigheid lijkt vrij willekeurig verdeeld over de studietijdniveaus.
Leeftijd en gedrag:
Oudere studenten zijn iets vaker aanwezig in de groep met hogere afwezigheid, maar dit is niet eenduidig.
Leeftijd heeft weinig zichtbaar effect op de relatie tussen studietijd en afwezigheid.
✅ Aangepaste conclusie#
Op basis van de scatterplot tussen studietijd en afwezigheid, waarin leeftijd is meegenomen als kleuraspect, kunnen we concluderen dat er geen sterke directe relatie is tussen hoeveel een student studeert en hoe vaak deze afwezig is.
Hoewel sommige studenten met weinig studietijd vaker afwezig zijn, komt dit beeld niet consequent terug. Er zijn ook studenten die weinig studeren maar wél goed aanwezig zijn, net zoals er studenten zijn die veel studeren maar toch vaak afwezig zijn. Dit suggereert dat andere factoren dan studietijd mogelijk een sterkere rol spelen bij schoolverzuim, zoals motivatie, gezondheid of thuissituatie.
Wat betreft leeftijd zien we geen duidelijke invloed op dit verband: studenten van verschillende leeftijden zijn zowel bij de lage als de hoge afwezigheidsniveaus vertegenwoordigd. Hierdoor kunnen we niet stellen dat leeftijd een modererende rol speelt in de relatie tussen studietijd en afwezigheid.
De scatterplot laat een zwak negatief verband zien tussen studietijd en afwezigheid (correlatie ≈ -0.14): studenten die meer studeren, zijn iets minder vaak afwezig. De spreiding is echter groot en leeftijd lijkt deels samen te hangen met beide variabelen. Er zijn dus mogelijk meerdere onderliggende verklaringen.
Er is een zwakke negatieve samenhang zichtbaar tussen studietijd en afwezigheid: studenten die meer studeren, zijn gemiddeld minder vaak afwezig. Oudere studenten (donkerder gekleurd) hebben soms hogere absenties ondanks hogere studietijd, wat kan wijzen op andere onderliggende factoren.
heatmap_data = df1.groupby(['age', 'famrel'])['Dalc'].mean().reset_index()
fig = px.density_heatmap(heatmap_data, x='age', y='famrel', z='Dalc', color_continuous_scale='Blues',
title="Gemiddeld alcoholgebruik (Dalc) per leeftijd en familieband")
fig.update_layout(height=500)
Analyse van de heatmap “Gemiddeld alcoholgebruik per leeftijd en familieband (Dalc)”#
Deze heatmap laat het gemiddelde doordeweeks alcoholgebruik (Dalc) zien, gegroepeerd per leeftijd en kwaliteit van de familierelatie (Famrel).
Leeftijd (x-as):
Leeftijd varieert van 15 tot 22 jaar.
Er zijn duidelijk minder studenten in de hoogste en laagste leeftijden, met de meeste studenten tussen 16 en 18.
Famrel (y-as):
De schaal loopt van 1 (zeer slecht) tot 5 (zeer goed).
Er zijn relatief weinig studenten met een lage familiebandscore (1 of 2), het meeste valt tussen 3 en 5.
Alcoholgebruik (Dalc):
Hogere alcoholconsumptie is vaker zichtbaar bij studenten met een lagere kwaliteit van familiebanden (Famrel = 1 of 2).
Bij vrijwel alle leeftijden geldt dat slechtere familiebanden samenhangen met iets hogere Dalc-waarden.
De kleurverzadiging laat zien dat de combinatie van jongere leeftijd en slechte familiebanden gemiddeld het hoogste doordeweekse alcoholgebruik oplevert.
Opvallendheden:
Sommige blokken missen data (geen kleur); dit betekent dat er in de dataset geen studenten waren met die specifieke combinatie van leeftijd en familieband.
De kleurgradiënt is subtiel, maar suggereert structureel verband tussen gezinsrelaties en alcoholgebruik.
Conclusie#
De heatmap toont aan dat er een zichtbare relatie bestaat tussen de kwaliteit van de familierelatie (Famrel) en het doordeweekse alcoholgebruik (Dalc) onder middelbare scholieren. In het bijzonder is te zien dat slechtere familiebanden (score 1–2) gepaard gaan met hogere gemiddelde alcoholconsumptie, ongeacht de leeftijd van de student.
Hoewel leeftijd op zichzelf geen extreem verschil laat zien in Dalc-waarden, wordt bij jongere studenten met zwakkere familiebanden relatief meer alcoholgebruik gerapporteerd. Dit suggereert dat sociale en relationele factoren binnen het gezin een belangrijkere rol spelen dan leeftijd bij het verklaren van doordeweeks alcoholgebruik.
De resultaten ondersteunen de tweede invalshoek van ons verhaal: dat de thuissituatie en familiecontext van jongeren een significante invloed heeft op hun alcoholgedrag.
Reflectie#
Deze sectie zal worden aangevuld na het feedbackmoment. Hier reflecteren we op ontvangen feedback en hoe deze is toegepast.
Deze sectie zal worden ingevuld na het peer feedback moment. Hier beschrijven we hoe de feedback van anderen ons geholpen heeft bij het verbeteren van onze visualisaties en argumenten.
Werkverdeling#
Tijmen de Langen: Visualisaties uit Dataset 1
Dion Sneekes: Data preprocessing en ondersteuning
Wessel Bours: Visualisaties uit Dataset 2 en correlatieanalyse
Zhong Ying He: Structuur, tekstuele uitwerking en argumentatie
Tijmen de Langen: Verantwoordelijk voor visualisaties uit Dataset 1
Dion Sneekes: Dataset cleaning en preprocessing
Wessel Bours: Analyse en visualisaties uit Dataset 2
Zhong Ying He: Verantwoordelijk voor structuur, introductie en argumentatie